内存管理

内存管理概念

内存管理的概念

  1. 内存管理:操作系统对内存的换分和动态规划称为内存管理
  2. 内存管理的功能

    • 内存空间的分配与回收
    • 地址转换
    • 内存空间扩展
    • 存储保护
  3. 进程运行的基本原理

    1. 程序装入与链接
      • 编译:将源代码编译成目标模块
      • 链接:将目标模块和库函数链接成装入模块
        • 静态链接
        • 装入时动态链接
        • 运行时动态链接
      • 装入:将装入模块装入内存运行
        • 绝对装入:程序逻辑地址和实际内存地址相同
        • 可重定位装入(静态重定位):装入模块装入内存时,进行重定位(地址转换)
        • 动态运行时装入(动态重定位):地址转换在程序执行时进行
    2. 逻辑地址空间和物理地址空间
      • 相对地址:目标模块从0号单元开始编址,相对该地址的地址即为相对地址
      • 逻辑地址:内存中物理单元的集合称为逻辑地址空间,它是地址转换的最终地址
      • 地址重定位:逻辑地址转换为物理地址
    3. 内存保护
      • 重定位寄存器
      • 界地址寄存器

覆盖和交换

  1. 覆盖
    将用户空间分成固定区和覆盖区,固定区存放活跃的部分,覆盖区存放即将访的段,其它段存放在外存。覆盖用于一个进程或进程中,覆盖技术对程序员不透明,已成历史。
  2. 交换
    将处于等待状态的进程序从内存移到辅存称为换出,将准备好竞争CPU运行的程序从辅存移到内存称为换入。交换技术用于不同进程之间

连续分配管理方式

连续分配方式指为一个程序分配一个连续的内存空间。
  1. 单一连续分配
    内存分为系统区和用户区,系统区给操作系统使用,用户区给一道用户程序使用,只能用在单任务操作系统中
  2. 固定分区分配
    用户空间划分为若干个固定大小的区域,每个分区只装入一道程序。分区有等大小分区和不等大小分区。固定分区有内部碎片

  3. 动态分区分配
    动态分区分配又称为可变分区分配。在进程装入内存时,根据进程大小动态建立分区。动态分区分配会造成外部碎片。
    动态分区分配策略:

    • 首次适应算法(First Fit)
    • 最佳适应(Best Fit)
    • 最坏适应(Worst Fit)
    • 邻近适应(Next Fit)

非连续分配管理方式

1
2
3
非连续分配指一个程序分散地装入到不相邻的内存分区中。
按照分区分配是否固定分为分页存储管理和分段存储管理。
分页存储管理中又依据运行程序时是否把全部页面都装入内存才运行分为基本分页存储管理和请求分页存储管理。
  1. 基本分页存储管理方式
    将主存空间划分为大小相等的块,进程执行时,以块为单位申请块空间。
    分页管理不会产生外部碎片,每个进程平均产生半个块大小的内部碎片(页内碎片)

    1. 分页存储的基本概念
      • 页面:进程中的块称为页,内存中的块称为页框,在外存的称为块
      • 地址结构:
        |31 … 12|11 … 0|
        |—-|—-|
        |页号P|页内偏移量W|
      • 页表:页表在内存中,用于建立进程页号到内存中物理块号的地址映射
    2. 基本地址变换机构: 将逻辑地址转换为物理地址
    3. 具有块表的地址变换机构
      地址变换机构
    4. 二级页表
  2. 基本分段存储管理方式

    1. 分段
    2. 段表
    3. 地址变换机构
    4. 段的共享与保护
  3. 段页式管理方式
    段页式

虚拟内存管理

虚拟内存管理的基本概念

  1. 传统存储管理方式特征
    • 一次性:作业要一次全部装入内存后才能运行
    • 驻留性:作业装入内存后,一直驻留在内存中
  2. 局部性原理
    • 时间局部性:
    • 空间局部性:
  3. 虚拟存储器定义和特征
    虚拟存储器指具有请求调入功能和置换功能,能从逻辑上对内存容量就那些扩展的一种存储系统。
    主要特征:
    • 多次性:允许作业分多次调入内存运行
    • 对换性:允许作业进行换入和换出
    • 虚拟性:逻辑容量=内存容量+外存容量
  4. 虚拟存储技术的实现
    实现方式:
    • 请求分页存储管理
    • 请求分段存储管理
    • 请求段页式存储管理
      硬件支持:
    • 内存和外存
    • 中断机构
    • 地址变换机构
    • 页(段)表机制

请求分页管理方式

  1. 页表机制
    页表项:
    • 页号
    • 物理块号
    • 状态位P:标记该页是否已调入内存
    • 访问字段A:记录本页的访问次数
    • 修改位M:标志该页调入内存后是否被修改
    • 外存地址: 该页的外存地址
  2. 缺页中断机构
    • 在指令执行期间发生,属于内部中断
    • 一条指令执行期间可能发生多次缺页中断
  3. 地址变换机构
    地址变换时先检索快表:
    • 如果在块表中找到对应页,修改页表项的访问位,利用页表项的物理块号和页内地址形成物理地址。
    • 如果找不到,则检索内存中的页表,找到对应页号,查看页表项中的状态位P,若该页未调入内存,则产生缺页中断,请求从外存中把该页调入内存。

页面置换算法

进程运行时,若其访问的页面不在内存中,且内存已经没有足够空间,则要从内存中换出页面,选择调出页面的算法称为页面置换算法。

  1. 最佳置换算法(OPT):调出最长时间内不再使用的页面
  2. 先进先出页面置换算法(FIFO):调出最早调入的页面会产生Belady异常(分配物理块数增大而缺页次数反而增加)
  3. 最近最久未使用置换算法(LRU):
  4. 时钟置换算法(CLOCK)或最近未用算法(NRU):调入的页面使用位初始值设为1并形成一个循环,指针指向第一个页面。每次调换时从指针处开始扫描循环,若使用位为1则置为0,指针后移;若使用位为0,则置换该页面,指针后移。

页面分配策略

  1. 置换策略
    固定/可变分配:考虑进程分配的物理块是否是固定的
    局部/全局置换:考虑是只在进程内部置换还是可以使用其他物理块
    组合策略有:
    • 固定分配局部置换
    • 可变分配全局置换
    • 可变分配局部置换
    • 因为固定分配限制进程的可用物理块所有没有固定分配全局置换
  2. 调入页面时机
    • 预调页策略:运行前调页,由程序员指定调页策略
    • 请求调页策略:运行期间调页
  3. 从何处调入页面
    文件区存放文件,采用离散分配;对换区存放对换页面,采用连续分配
    • 从对换区调入
    • 从文件区调入

抖动

抖动是指频繁的页面调度行为

工作集

工作集(驻留集)指某段时间间隔内,进程要访问的页面集合,合理选择工作集大小可以防止抖动现象

地址翻译